using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.IdGenerators;
using MongoDB.Bson;

namespace folhapagamento
{
	[Serializable()][DataContract(Name="Colaborador")]
	[CollectionDataContract(Name = "Colaboradores", ItemName = "Colaborador")]
	public class Colaborador
	{
		[BsonId]
		public ObjectId id {get; set;}
		[DataMember]
		public int codigo {get; set;}
		[DataMember]
		public string nome {get; set;}
		[DataMember]
		public string endereco {get; set;}
		[DataMember]
		public string telefone {get; set;}
		[DataMember]
		public string bairro {get; set;}
		[DataMember]
		public string cep {get; set;}
		[DataMember]
		public string cpf {get; set;}
		[DataMember]
		public decimal salarioAtual {get; set;}
		[DataMember]
		public List<OcorrenciaFolha> ocorrencias = new List<OcorrenciaFolha>();
		
		public Colaborador(){
			
		}
		
		public Colaborador(int codigo, string nome, 
		                   string endereco, string telefone, string bairro,
		                   string cep, string cpf, decimal salarioAtual)
		{
			this.codigo = codigo;
			this.nome = nome;
			this.endereco = endereco;
			this.telefone = telefone;
			this.bairro = bairro;
			this.cep = cep;
			this.cpf = cpf;
			this.salarioAtual = salarioAtual;
		}
		
		public decimal calculaSalario()
		{
			foreach(OcorrenciaFolha ocorrencia in ocorrencias)
			{
				if(ocorrencia.tipoOcorrencia.Equals(TipoOcorrencia.D))
				{
					salarioAtual -= ocorrencia.valor;
				}else{
					salarioAtual += ocorrencia.valor;
				}
			}
			return salarioAtual;
		}
		
		public Colaborador insereOcorrencia(OcorrenciaFolha ocorrenciaFolha)
		{
			ocorrencias.Add(ocorrenciaFolha);
			return this;
		}
		
		public void mostraColaborador()
		{
			Console.WriteLine("Colaborador: " + codigo + "--------------------------------------------");
			Console.WriteLine("Cpf: " + cpf + " Nome: " + nome);
			Console.WriteLine("Endereco: " + endereco + " " + bairro + " " + cep);
			Console.WriteLine("Telefone: " + telefone);
			Console.WriteLine("Salário: " + salarioAtual); 
			foreach(OcorrenciaFolha ocorrencia in ocorrencias)
			{
				if(ocorrencia.tipoOcorrencia.Equals(TipoOcorrencia.D))
					Console.WriteLine("Desconto - " + ocorrencia.descricao + ", Valor: " + ocorrencia.valor );
				else
					Console.WriteLine("Provento - " + ocorrencia.descricao + ", Valor: " + ocorrencia.valor );
			}
			Console.WriteLine("------------------------------------------------------------");
		}
		
	}
}


